In NAND memory technology, the difficulty of scheduling operations often depends on the application. In single data stream environments, for example, scheduling reading and writing may not necessarily be difficult as long as the system can account for sufficiently high read/write bandwidths. In more complex environments, however, there may be multiple data streams being read and written to/from the NAND memory, with each stream having its own timing requirements. In such an environment, optimization in scheduling is not nearly as simple, because of the conflicting requirements between the streams and the various timings required to read, write or erase a page.
Moreover, numerous asynchronous operations complicate the real-time needs of a media system. For example, “garbage collection”, in which a NAND platform reclaims unused or stale resources, can cause large deviations from a real-time schedule. Thus, to globally optimize performance, it is necessary to create a real-time schedule for such asynchronous operations.
One method to schedule such operations is to use the OS. However, this consumes system processor resources, and may complicate the power model for power-sensitive applications, such as in portable devices. Moreover, depending on the load that is being processed by the system processor, there may be considerable uncertainty in when the system processor is able to schedule such operations.